In a typical legacy data processing system, firmware provides the machine instructions that control the system when the system is being powered up or has been reset, but before an operating system (OS) is booted. That is, the firmware controls the pre-OS or pre-boot operations. Firmware may also control certain operations after the OS has been loaded, such as operations for handling certain hardware events and/or system interrupts. The firmware may handle pre-boot and post-boot operations through a set of routines referred to collectively as a basic input/output system (BIOS). The BIOS thus provides the interface between the hardware components of the system and software components such as the OS.
Some years ago, the extensible firmware interface (EFI) model was announced. Version 1.10 of the EFI Specification, dated Dec. 1, 2002, (the “EFI Specification”) may be obtained from the URL xwwwx.intel.com/technology/efi/main_specification.htm, where the characters “www” in the URL have been replaced with the characters “xwwwx” to avoid an active link from within this document. The EFI Specification defines a set of standard interfaces and structures to be provided by low-level platform firmware. Those interfaces and structures may be used for tasks such as loading additional firmware, running pre-boot applications, booting the OS, and providing runtime services after an OS has been booted. The Intel® Platform Innovation Framework for EFI is an example of a platform framework that is based on the EFI model.
There are not expected to be any future versions of the EFI specification. However, in 2006, the Unified EFI Forum released Version 2.0 of the Unified EFI (UEFI) Specification, dated Jan. 31, 2006 (the “UEFI Specification”). The UEFI Specification may be obtained from the URL xwwwx.uefi.org/index.php?pg=4, where the characters “www” in the URL have been replaced with the characters “xwwwx” to avoid an active link from within this document. The UEFI specification is based on the EFI specification, with corrections and changes managed by the Unified EFI Forum. In the coming years, EFI-based or UEFI-based platform frameworks may supplant frameworks based on the legacy BIOS model as the frameworks of choice for designing, building, and operating data processing systems.
For purposes of this disclosure, the terms “firmware” and “BIOS” refer to software that may execute in a processing system before the processing system has booted to an OS, software that may provide runtime services that allow the OS or other components to interact with the processing system hardware, and similar types of software components. Thus, the terms “firmware” and “BIOS” include, without limitation, software based on the UEFI model and software based on the legacy BIOS model. Traditionally, firmware has typically been stored in non-volatile memory. In more recent years, however, processing systems have been developed that store firmware in other types of storage devices or obtain firmware from remote repositories.
For purposes of this disclosure, depending upon the particular implementation under consideration, the term “processing unit” may denote an individual central processing unit (CPU) within a processing system, a processing core within a CPU, a logical processing unit such as a hyper-thread (HT), or any similar processing resource, or any collection of such resources configured to operate collectively as a unit. In a system where multiple processing units exist, the OS normally owns all of the processing units. However, virtualization software, such as a virtual machine monitor (VMM), may be used to allocate one processing unit to one virtual machine (VM), and another processing unit to another VM.
Also, in some processing systems, it is possible to hide one or more of the processing units from the OS, for instance by modifying the advanced configuration and power interface (ACPI) tables produced by the BIOS. In some systems it is also possible to hide one or more portions of random access memory (RAM) from the OS. Additionally, in some systems, several peripheral and integrated devices can be hidden from the OS, for example by updating device-hide registers or other locations in the system's input/output (I/O) controller hub (ICH). These techniques may be used to hide devices for debugging purposes.